Programmable integrated circuits are a type of integrated circuit that can be configured by a user to implement custom logic functions. In a typical scenario, a logic designer uses computer-aided design (CAD) tools to design a custom logic circuit. When the design process is complete, the CAD tools generate configuration data. The configuration data is loaded into a programmable integrated circuit to configure the device to perform desired logic functions.
In a typical system, a programmable integrated circuit, memory devices, and other electronic components are mounted on a printed circuit board. The programmable integrated circuit includes memory interface circuitry that is used to relay data back and forth between the programmable integrated circuit and the memory devices (i.e., the memory interface circuitry is used to read data from and write data into the memory devices). When performing such memory read and write operations, the timing of control and data signals is critical.
Because programmable integrated circuits can be configured in many different ways and are installed on many different types of boards, the lengths of circuit board traces coupling the programmable integrated circuit to the memory devices can vary from one system to another. As a result, it is generally not possible to know in advance exactly how data and clock paths between a programmable integrated circuit and a given memory device will perform. In some systems, the data and clock paths may have one set of timing characteristics, whereas in other systems the data and clock paths may have a different set of timing characteristics.
Mismatch (or skew) between the data and clock paths may result in degraded setup and hold times. In modern high speed memory interface circuitry that use double data rate (DDR) transfers (i.e., a data transmission scheme in which data toggles on both rising and falling edges of the clock), a small amount of skew can result in faulty data transfers during read and write operations.
Programmable integrated circuits are often required, to accommodate communications with different types of memory using respective memory interface protocols. For example, a programmable integrated circuit may be required to support communications with DDR, DDR2, DDR3, and synchronous dynamic random-access memory (SDRAM) that each operates using different memory interface protocols.
A portion of programmable logic on the programmable integrated circuits can be configured (programmed) to form a calibration circuit. The calibration circuit is used to calibrate timing settings of the memory interface circuitry to reduce communications errors between the programmable integrated circuit and a memory device. However, it may be difficult for the calibration circuit to effectively calibrate the memory interface circuitry as memory interface speeds increase. For example, programmable logic used to form the calibration circuit may operate at frequencies of about 75 to 100 MHz, whereas memory interface circuitry may operate at higher′ frequencies of 0.8 GHz or 1 GHz (as examples).